阅读更多

关系数据模型已经流行了几十年了,但是一种新型的数据库(即NoSQL)正在吸引各大企业的关注.下面是对其优势与劣势的一个简单总结.

在过去的1/4世纪中,关系型数据库(RDBMS)一直是数据库管理系统的主导模型.但是,今天,非关系型,”云,”或者”NoSQL”数据库正以数据库 管理系统的替代模型而获得认知.在本文中,我们将考察这些非关系型NoSQL数据库的10个关键因素:最重要的5个优势以及5个挑战.

可以通过此链接下载本文的PDF格式.

NoSQL的5个优势

1. 弹性扩展

多年来,数据库管理员一直依赖于向上扩展(scale up)-随着数据库负载的增加购买更大的数据库服务器―而不是向外扩展-随着负载的增加将数据库分不到多个不同的主机上.然而,随着每秒事务数与可用性需 求的提高,以及数据库往云或虚拟环境的迁移,向外扩展到廉价硬件的经济优势越来越难以抵挡.

RDBMS或许比较难以在廉价的集群上进行向外扩展,但是,NoSQL数据库的新品从设计之初就是为了利用新节点的优势进行透明扩展,他们通常在设计时就考虑使用低成本的廉价硬件.

2. 大数据量

在过去10年,与每秒事务数的增长超出了认知一样,存储的数据的规模也出现了极大的增长.O’Reilly明智的称此为”数据的工业革命.”RDBMS的 容量也在增长以匹配这些数据的增长,但是,与每秒事务数一样,单个RDBMS可有效管理的数据规模限制让部分企业越来越难以忍受.今天,大规模数据量可以 交由NoSQL系统来处理,比如Hadoop,超过目前最大的RDBMS可以管理的数据规模.

3. 再见了,DBA(回头见,DBA?)

这些年,虽然RDBMS的提供商宣称推出了很多的可管理性方面的改进,高端的RDBMS系统还是只能交由昂贵的、高度受训的DBA来进行维护.高端RDBMS系统从设计到安装以及后续的调优,都需要DBA们深度介入.

从理论上,通常,NoSQL数据库的最初的设计目标就是更少的管理介入:自动修复、数据分布以及更简单的数据模型,从而更少的管理与调优需求.实际上,关于DBA将死的谣言很可能被略微放大了.对于任何关键的数据存储,总是需要有人来关心它的性能以及可用性.

4. 经济性

NoSQL数据库通常使用廉价服务器集群来管理暴增的数据与事务规模,而RDBMS倾向于依赖昂贵的专有服务器与存储系统.其结果是,NoSQL数据库的每GB数据或每秒事务数的成本要远远低于RDBMS,使得你可以以更低的价格来存储与处理更多的数据.

5. 灵活的数据模型

在大量的生产环境数据库中,变更管理是一个非常棘手的问题.哪怕是对数据模型的很小的变更,在RDBMS中也需要进行小心的管理,甚至还需要停机或降低服务级别.

在数据模型的限制这一点上,NoSQL数据库要宽松的多,或者完全不存在. NoSQL的键值存储(Key value Store)与文档数据库(Document Database)允许应用在一个数据单元中存入它想要的任何结构.即使是定义更加严格的基于BigTable的NoSQL数据库,通常也允许创建新的字 段而不致带来麻烦.

其结果是,应用的变更与数据库结构的变更不需要绑定在一个变更单元中进行管理.理论上,这可以提高应用的迭代速度,然而,显然,如果应用无法管理数据的完整性,它将带来不良的副作用.

NoSQL的5个挑战

NoSQL数据库的可能性空间引发了大量的关注,但是,在它们成为企业级应用的主流之前,还有大量的障碍有待克服.下面是几个主要的挑战.

1. 成熟度

RDBMS已经存在了很长一段时间. NoSQL的支持者认为它们的年纪是它们过时的象征,但是,对于大部分CIO(首席信息官)来讲,RDBMS的成熟度是可以让人放心的.通常,RDBMS 系统都很稳定,功能也很丰富.相比而言,大部分NoSQL的替代品都还处于前-生产环境阶段,还有大量的关键特性有待实现.

生活在科技前沿对于大部分开发人员来讲,是令人兴奋的,但是,企业在实施时必须非常谨慎.

2. 支持力度

企业还希望获得保证,当关键系统出现故障时,他们可以获得及时而有效的支持.所有的RDBMS提供商都在竭尽全力地为企业提供高级别的支持.

相比而言,大部分的NoSQL系统都是开源项目,虽然,每一个NoSQL数据库通常都会有一家或多家公司为其提供支持,这些公司通常都是小的创业公司,没有能力提供全球的支持,没有足够的支持资源,或者没有类似于Oracle、Microsoft或者IBM的信用.

3. 分析与商业智能

NoSQL数据库经过不断的演化,已经可以满足现代的Web 2.0应用的扩展需求.相应地,它们的大部分功能集也旨在满足这些应用的需求.然而,应用程序中的数据的价值,要超出一个典型的Web应用的插入-阅读- 更新-删除的周期.从公司数据库中挖掘信息以提高公司的效率与竞争力的业务,以及商业智能(BI)是所有大中型公司的关键议题.

NoSQL数据库提供了新型的工具来做即时的查询与分析.哪怕是一个简单的查询,也需要可观的编程技能,通常使用的BI工具都无法访问NoSQL数据库.

稍显宽慰的是,还有类似于HIVE与PIG的这类解决方案,通过它们可以较为简单地访问Hadoop集群中的数据,或许最终,可以较为简单的访问其他的 NoSQL数据库.Quest软件公司开发一个产品,Toad For Cloud Database,它提供了对各种不同的NoSQL数据库的即时查询功能.

4. 管理

NoSQL的设计目标可能是提供零-管理的解决方案,但是,当前的现实是,此目标远远没有实现.目前的NoSQL系统需要大量的技能来进行安装,以及需要大量的努力来进行维护.

5. 专业技能

坦率的讲,目前世界上有上百万的程序员非常熟悉RDBMS的原理与编程,他们分布在各种业务场景中.相比而言,几乎每一个NoSQL开发人员都还处于学习 阶段.随着时间的流逝,这种状况将得到解决,但是,现在,寻找一个有经验的RDBMS开发人员与RDBMS管理员要比寻找一个NoSQL专家要容易的多.

结论

NoSQL数据库正在成为越来越多的数据库环境的重要的组成部分,如果使用得当的话,它可以提供实实在在的收益.然而,企业在推进它们的使用时需要非常谨慎,需要明白这些数据库的相关内在限制与问题.

关于作者

Guy Harrison是Quest 软件公司的研发部门的总监. 知名的数据库专家,有着20多年的应用与数据库管理、性能调优与软件开发相关经验,Guy是出版了多本关于数据库技术的书籍,发表了大量相关的文章,并经常在技术会议上做演讲.

来自: dbthink
9
3
评论 共 1 条 请登录后发表评论
1 楼 czwlucky 2012-01-29 16:22
引用
从公司数据库中挖掘信息以提高公司的效率与竞争力的业务,以及商业智能(BI)是所有大中型公司的关键议题.

商业智能究竟是什么? 让人头疼啊
红色标记部分+商业智能这个词,更是让人纠结.

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • WMI 获取计算机信息(cpu 硬盘 网卡 网速)

    WMI 获取计算机信息(cpu 硬盘 网卡 网速)C# 源码

  • WMI使用集锦

    1.WMI简介WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。2.使用时首先添加System.Management.dll,然后引用using System.Management;using System.Threa

  • 利用WMI获取硬盘信息

    Windows Management Instrumentation (WMI) 是可伸缩的系统管理结构,它采用一个统一的、基于标准的、可扩展的面向对象接口。WMI 为您提供与系统管理信息和基础 WMI API 交互的标准方法。WMI 主要由系统管理应用程序开发人员和管理员用来访问和操作系统管理信息。我们需要使用.net Framwork里面System.Management命名空间下提供的类来实

  • 使用 WMI 和 Visual Studio 获取硬盘信息

    介绍 再一次问好!今天我就讲讲如何通过WMI来检索硬盘信息。有时有必要知道磁盘上有多少可用空间、它是什么类型的驱动器和/或正在使用的文件系统。不是很常见,我们可能需要知道硬盘的序列号是什么;特别是当我们想让用户为我们的程序购买许可证时。我将使用 VB 和 C# 涵盖所有这些内容。让我们开始派对吧! WMI 引用自MSDN的 WMI(Windows 管理规范)是在基于 Windows 的操作系统上管理数据和操作的基础结构。好的,通俗地说,这意味着通过使用WMI,我们可以检索硬件和/或服务核心的数据。我们

  • 查询硬件信息

    WMI技术介绍和应用——查询硬件信息 - cssealine 时间 2013-10-13 03:21:00 博客园-所有随笔区 相似文章 (0) 原文  http://www.cnblogs.com/cnsealine/p/3366300.html         因为一台电脑上可以有多块硬盘,所以在查询硬盘信息之前,我们需要明确我们要查询哪块硬盘。其中我们将要使用到《WMI技术

  • 用WMI获取磁盘硬件信息

    #include "stdafx.h" using namespace std; #include #include #include #pragma comment ( lib, "wbemuuid.lib" ) IWbemServices *pSvc = NULL; IWbemLocator *pLoc = NULL; IWbemClassObject* pclsObj = NULL;

  • WMI技术介绍和应用——查询磁盘分区和逻辑磁盘信息

    本文使用了《WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类》中代码做为基础。本节只是列出了WQL语句,具体使用参看前面的例子。(转载请指明出于breaksoftware的csdn博客) 本节主要介绍Win32_DiskPartition和Win32_LogicalDisk两个类的应用。Win32_DiskPartition用于查询磁盘分区信息,Win32_Logi...

  • WMI获取磁盘信息

      private void GetAllDisk1()        {            foreach (ManagementObject drive in new ManagementObjectSearcher(                "select * from Win32_DiskDrive").Get())            {     

  • 使用WMI获取硬盘信息

        WMI可以进行的操作很多,想Windows优化大师就有很多操作是通过WMI进行的。在这篇文章中主要是给出一个使用WMI来获取数据的一个范例,如果要获取其他数据,可以先使用WMI studio tools查询,然后copy代码就可以了。我要贴上去代码也是msdn中的范例了。int GetStorageInfo(CString szClass,REQHARDWAREINFO& HardIn

  • 利用WMI获取磁盘信息

    需要引用System.Management;

  • C/C++通过WMI和系统API函数获取获取系统硬件配置信息

    前段时间由于项目需要,要求做一个服务器的实时性能监控(CPU、内存、网络利用率等)和读取服务器的硬件配置参数的接口供项目组使用,就是一个类似于鲁大师之类的东东吧...      当然第一想法肯定是利用Windows提供的系统标准API函数来完成所需的功能,当然这也应该是当前最理想最有效率的选择了。但是如果你对API编程不是很熟练的话...那就相当蛋疼了!你知道用API可以做到但是不知道用哪个AP

  • 主机性能监控之wmi 获取磁盘信息

    标 题:主机性能监控之wmi 获取磁盘信息作 者:itdef链 接:http://www.cnblogs.com/itdef/p/3990541.html 欢迎转帖 请保持文本完整并注明出处 仅在《主机性能监控之wmi 获取系统信息及内存性能信息》 代码中添加一个函数 使用的结构体位为Win32_LogicalDisk class Win32_LogicalDisk ...

  • VB中使用WMI获取系统硬件和软件有关信息

    原帖地址:http://blog.csdn.net/ericbai/article/details/474308 WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。 实例如下: '用WMI,先

  • 获取磁盘大小

    系统磁盘:File file = new File(“c:/”) 当前磁盘:File file = new File("/"); long totalSpace = file.getTotalSpace(); long freeSpace = file.getFreeSpace(); long usedSpace = totalSpace - freeSpace; ...

  • 【C++】WMI获取系统硬件信息(CPU/DISK/NetWork etc)

    官网找到一个例子,根据例子修改下可以获取很多信息 原文链接:http://blog.csdn.net/u010352603/article/details/51400769 [cpp] view plain copy  #define _WIN32_DCOM   #include    using namespace std;   #include   

Global site tag (gtag.js) - Google Analytics